# 引入项目的包
import streamlit as st
import time
import base64
import data.data as dd
import model.model as mm
import datetime
st.set_page_config(
    page_title="百科助手页面",
    page_icon="🤖"
)
st.html("""
        <style>
        button{
            width:100% !important;
        }
        #root > div:nth-child(1) > div.withScreencast > div > div > div > section.st-emotion-cache-1gv3huu.eczjsme18 > div.st-emotion-cache-6qob1r.eczjsme11 > div.st-emotion-cache-1gwvy71.eczjsme12 > div > div > div > div > div:nth-child(1) > div > div > h1{
        text-align:center;
        }
    </style>
    """)

user_id = st.session_state.user_id
username = st.session_state.username
mm.page_config()

st.title('AI百科问答助手👍👍👍')
st.subheader(f"欢迎{username}用户使用")
st.text("这是一个智能小助手，可以对你的任何问题进行解答！请尽情的使用吧！")


# 渲染私人助手界面的时候，应该查询当前用户的历史聊天记录，用于进行界面的渲染
list = dd.query_message_by_user_id(user_id=user_id)
if list:
    #{"message_id":xx,"user_id":xx,message:xxx,role:xxx,message_time:xxx"}
    for msg in list:
        with st.chat_message(msg["role"]):
            st.write(msg["message"])
else:
    # 如果当前用户和AI助手没有任何的聊天记录，需要给他一个默认的助手欢迎语
    with st.chat_message("assistant"):
        st.write("我是你的智能AI助手，可以回答你的任何问题，请问你有什么问题？")

# 制作聊天的输入框
problem = st.chat_input("请说出你的问题")


# with st.chat_message("assistant"):
#     st.write("我是你的智能助手，请说出你的疑问")

if problem:
    # 展示一个聊天信息 chat_message是一个聊天信息的展示组件，如果组件中增加信息，需要通过如下语法来完成
    with st.chat_message("user"):
        st.write(problem)
        dd.insert_message(user_id,problem,"user",datetime.datetime.now())
    # AI回复一下
    with st.chat_message("assistant"):
        res = mm.bm(problem)
        # write写出的数据是直接一下全部输出了 一般输出应该都是流式输出
        # write写出一个字符串即可，write_stream中不能放字符串 而应该是一个迭代器
        st.write(res)
        dd.insert_message(user_id,res,"assistant",datetime.datetime.now())


def main_bg(main_bg):
    main_bg_ext = "png"
    st.markdown(
        f"""
         <style>
         .stApp {{
             background: url(data:image/{main_bg_ext};base64,{base64.b64encode(open(main_bg, "rb").read()).decode()});
             background-size: cover
         }}
         </style>
         """,
        unsafe_allow_html=True
    )

# 调用
main_bg('images/login6.png')